import java.util.LinkedList;
import java.util.Queue;

class Solution1162 {
    public int maxDistance(int[][] grid) {
     int m  = grid.length , n = grid[0].length ;
     boolean[][] hash = new boolean[m][n] ; 
     Queue<int[]> queue = new LinkedList<>();
     for(int i=0 ; i < m ; i ++){
        for(int j=0 ; j < n ; j ++){
           if(grid[i][j] == 1){
            queue.add(new int[]{i , j}) ; 
            hash[i][j] = true ;

           }
        }
     }
      int[] dx = {0,0,1,-1} ; 
      int[] dy = {1,-1,0,0} ; 

     int len = -1 ; 
     while(!queue.isEmpty()){
        len ++ ;
        int size = queue.size() ;
        for(int i=0 ; i < size ; i ++){
            int[] arr = queue.poll() ;
            int a = arr[0] , b = arr[1] ; 
            for(int j=0 ; j < 4 ; j ++){
                int x = dx[j]+a , y = dy[j]+b ; 
                if(x >=0 && x <m && y>=0 && y<n && !hash[x][y]){
                  queue.add(new int[]{x , y}) ; 
                  hash[x][y] = true ;
                }
            }

        }
     }

     return len==0?-1:len ;
    }
}